<?php
/**
 * 响应  使用 return 返回
 * 使用 return 返回字符串
 * 使用 return 返回 数组 需要指定返回格式 数组转化为json字符串
 *   \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
 *使用 return 返回Reponse对象，reponse 指定格式和数据
 * Yii 的响应机制：Yii 使用 Response 组件统一管理 HTTP 响应
 * Headers 发送时机：在 action 执行完成后，Yii 才会发送 headers 和内容
 * 直接 echo 的影响：提前输出了内容，导致 headers 无法正常发送
 */

namespace app\controllers;


use yii\web\Controller;
use yii\web\Response;

class ResponseController extends Controller
{
    /**
     * curl loalhost/index/
     */
    public function actionIndex()
    {
        return 'index';
    }

    /**
     * curl loalhost/
     */
    public function actionData()
    {
        return ['data' => [], 'msg' => ''];
    }

    /**
     * curl loalhost/
     */
    public function actionArr()
    {
        \Yii::$app->response->format = Response::FORMAT_JSON;
        return ['data' => [], 'msg' => ''];
    }

    /**
     *  直接返回响应对象
     */
    public function actionResponse()
    {
        $content = ['data' => [], 'msg' => ''];
        $content = "hello world";
        \Yii::$app->response->format = Response::FORMAT_RAW;
        \Yii::$app->response->data = $content;
        return \Yii::$app->response;
    }

    /**
     * 控制器 响应对象方法   asJson() 实际上就是
     * \Yii::$app->response->format = Response::FORMAT_RAW;
     *   \Yii::$app->response->data = $content;
     */
    public function actionAsJson()
    {
        $data = ['data' => [], 'msg' => ''];
        $this->asJson($data);
    }

    /**
     * 直接 echo 字符串 报错
     */
    public function actionEcho()
    {
        echo "hello world!";
    }

    /**
     * php.ini 配置  开启缓存区后,直接echo 就不会报错
     * output_buffering=4096
     * {
    "output_buffering": "4096"
    }
     */
    public function actionEchoConf()
    {
        \Yii::$app->response->format = Response::FORMAT_JSON;
        $data['output_buffering'] = ini_get("output_buffering");
        return $data;
    }

    /**
     * 手动封装header,echo后直接退出
     */
    public function actionReEcho()
    {
        $content = ['data' => [], 'msg' => ''];
        $json = json_encode($content, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
        header('Content-Type: application/json');
        echo $json;
        exit(0);
    }
}